package com.foreveross.common.TaskManager;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import javax.annotation.Resource;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.foreveross.common.Constants;
import com.foreveross.dao.CommonDAO;
import com.foreveross.dao.VisitorCheckInDAO;
import com.foreveross.util.DateUtil;
import com.foreveross.util.FileUtil;

@Service("vistorCheckService")
@Transactional
public class VistorCheckService {
	
	private static Logger log = Logger.getLogger(VistorCheckService.class);
	
	@Resource
	VisitorCheckInDAO visitorCheckInDAO;
	
	private Timer timer = null; 
	
	private final Calendar cal = Calendar.getInstance();
	
	//一天运行一次
	private final long timePeriod = 24*60*60*1000;
	

	public Timer getTimer() {
		return timer;
	}
	
	public void updateVistorCheckStateTimer(){
		timer = new Timer(); 	          
	    timer.schedule(updateVistorCheckStateTask(), setTime(), timePeriod); 
	}
	
	private TimerTask updateVistorCheckStateTask(){
		return new TimerTask() {
	    	 public void run() {  
	    		 //执行的内容   
	    		 updateVistorCheckState();
	    	 }
	    };
	}

	private Date setTime(){	

		//每天定点执行     
		cal.set(Calendar.HOUR_OF_DAY,0);     
		cal.set(Calendar.MINUTE,0);    
		cal.set(Calendar.SECOND,0);
		
		
		Date date=cal.getTime(); 
		//第一次执行定时任务的时间 
		//如果第一次执行定时任务的时间 小于 当前的时间  
		//此时要在 第一次执行定时任务的时间 加一天，以便此任务在下个时间点执行。如果不加一天，任务会立即执行。  
		if (date.before(new Date()))  date =DateUtil.addDay(date, 1);   
		
		return date;
	}
	

	
	/**
	 * 更新访客登记失效状态
	 */
	private void updateVistorCheckState(){
		try{
			visitorCheckInDAO.updateVisitorCheckInStateByDate(DateUtil.DateToString(new Date(), "yyyy-MM-dd"));
		}catch(Exception e){
			log.error("更新访客登记失效状态失败",e);
			e.printStackTrace();
		}
		
	}
}
